package com.example.demo.service;

import com.example.demo.entity.FileNode;
import com.example.demo.exception.file.InvalidPathException;
import com.jcraft.jsch.SftpException;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

public interface FolderService {
    /**
     * 新建文件夹
     * @param path 文件夹路径
     * @throws IOException 报错
     */
    void creatFolder(String path) throws IOException, SftpException;

    /**
     * 上传文件夹到服务器
     * @param path 文件夹路径
     * @param files 文件夹
     */
    void uploadFolder(String path, MultipartFile[] files) throws Exception;

    /**
     * 将文件夹的信息存入数据库
     * @param path 数据库中文件夹的基本路径
     * @param files 这个文件夹
     * @param username 用户账户
     */
    void saveFolderToMysql(String path,MultipartFile[] files,String username) throws Exception;

    /**
     * 将文件信息存入数据库
     * @param path 数据库中文件的路径
     * @param file 文件
     * @param title 文件名
     * @throws Exception 异常
     */
    void saveFileToMysql(String path,MultipartFile file,String title) throws Exception;

    /**
     * 获取用户下所有文件夹目录
     * @return 用户的所有文件夹目录
     */
    FileNode getFolders(String type) throws SftpException;

    /**
     * 删除文件（实际上是将文件夹从oldType移到newType）
     * @param path 文件的路径
     * @param oldType 文件的默认路径，有:"file","header","trash"
     * @param newType 文件的默认路径，有:"file","header","trash"
     */
    void deleteFolders(String path,String oldType,String newType) throws SftpException, InvalidPathException;

    void renewFolders(String path) throws InvalidPathException, SftpException;

    /**
     * 永久删除文件，即从数据库和磁盘中删除
     * @param path 删除文件的路径
     */
    void deleteFolderForever(String path) throws InvalidPathException;

}
